package myself.study.network.tcp.demo;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;

import org.junit.Test;

/**
* @Name: TcpClientDemo
* @Description: TCP客户端请求类
* TCP客户端使用类：Socket
* 说明：此类实现TCP客户端套接字（也可以就叫“套接字”）。
* 步骤：
* 	1、创建客户端Socket对象
* 		Socket(InetAddress address, int port)  创建一个流套接字并将其连接到指定 IP 地址的指定端口号。
* 		Socket(String host, int port)  创建一个流套接字并将其连接到指定主机上的指定端口号。
* 		如果创建成功，表明与tcp服务端连接成功，否则，将报如下错误
* 			java.net.ConnectException: Connection refused: connect
* 	2、获取输出流对象，发送客户端请求数据
* 		public OutputStream getOutputStream() 返回此套接字的输出流，向服务端发送请求数据。 
* 	3、获取输入流对象，接收服务端响应结果
* 		public InputStream getInputStream() 返回此套接字的输入流，获取服务端返回的响应结果。 
* 	4、释放资源
* 		public void close() 关闭此套接字，关闭此套接字也将会关闭该套接字的 InputStream 和 OutputStream。 
* @Author: 李超	lc_jack@foxmail.com
* @CreateDate: 2017-1-12 上午10:52:01 
* @Version: V1.0
 */
public class TcpClientDemo {
	
	@Test
	public void tcpClient() throws UnknownHostException, IOException {
		//创建客户端Socket对象
		//Socket(InetAddress address, int port) 创建一个流套接字并将其连接到指定 IP 地址的指定端口号。
		Socket client = new Socket("222.28.133.3", 12345) ;
		//获取输出流对象，发送客户端请求数据
		OutputStream outputStream = client.getOutputStream() ;
		//发送客户端请求数据
		String requestData = "hello,tcp,我来了!" ;
		System.out.println("to server : " + requestData);
		outputStream.write(requestData.getBytes()) ;
		//获取输出流对象，接收服务端响应结果
		InputStream inputStream = client.getInputStream() ;
		byte[] buf = new byte[1024] ;
		int len = inputStream.read(buf) ;
		String responseData = new String(buf, 0, len) ;
		System.out.println("from server : " + responseData);
		//释放资源
		client.close() ;
	}

}
